Use case: Interrupt service routine

Sequence diagram

Interrupt service routine.

@startuml
participant "Application" as App
participant "GPIO" as GPIO
participant "EXTI" as EXTI
participant "NVIC" as NVIC

App -> GPIO: HAL_GPIO_Init()
App -> EXTI: HAL_EXTI_GetHandle()
App -> EXTI: HAL_EXTI_RegisterCallback()
App -> NVIC: HAL_NVIC_SetPriority()
App -> NVIC: HAL_NVIC_EnableIRQ()
EXTI -> App: GPIOx_Exti_FallingCb()
@enduml

Code snippet

HAL1

HAL2

GPIO_Init_TypeDef GPIO_InitStructure;
EXTI_HandleTypeDef EXTI_HandleStructure;


GPIO_InitStructure.Mode = GPIO_MODE_IT_FALLING;
GPIO_InitStructure.Pull = GPIO_NOPULL;
GPIO_InitStructure.Pin = GPIO_PIN_13;

HAL_GPIO_Init(GPIOC, &GPIO_InitStructure);

HAL_EXTI_GetHandle(&EXTI_HandleStructure, EXTI_LINE_13);






HAL_EXTI_RegisterCallback(&EXTI_HandleStructure,
                          HAL_EXTI_FALLING_CB_ID,
                          GPIOC_Exti_FallingCb);

HAL_NVIC_SetPriority(EXTI13_IRQn, 2, 0);
HAL_NVIC_EnableIRQ(EXTI13_IRQn);
HAL_EXTI_Enable(&hexti, HAL_EXTI_MODE_INTERRUPT);


static void GPIOx_Exti_FallingCb(void)
{
  (...)
}
hal_gpio_config_t GPIO_ConfigStructure;
hal_exti_handle_t hexti;
hal_exti_config_t EXTI_ConfigStructure;

GPIO_ConfigStructure.mode = HAL_GPIO_MODE_INPUT;
GPIO_ConfigStructure.pull = HAL_GPIO_PULL_NO;


HAL_GPIO_Init(HAL_GPIOC, GPIO_PIN_13,
              &GPIO_ConfigStructure);

HAL_EXTI_Init(&hexti, HAL_EXTI_LINE_13);

EXTI_ConfigStructure.trigger = HAL_EXTI_TRIGGER_FALLING;
EXTI_ConfigStructure.gpio_port = HAL_EXTI_GPIOC;
HAL_EXTI_SetConfig(&hexti, &EXTI_ConfigStructure);

HAL_EXTI_RegisterTriggerCallback(&hexti,
                                 GPIOC_Exti_FallingCb);


HAL_NVIC_SetPriority(EXTI13_IRQn, 2, 0);
HAL_NVIC_EnableIRQ(EXTI13_IRQn);

HAL_EXTI_Enable(&hexti, HAL_EXTI_MODE_INTERRUPT);

static void GPIOx_Exti_FallingCb(void)
{
  (...)
}

Key changes

  1. HAL2 separates configuration from initialization using HAL_EXTI_SetConfig() and requires explicit enabling using HAL_EXTI_Enable().

  2. HAL2 uses trigger-callback registration through HAL_EXTI_RegisterTriggerCallback().